home *** CD-ROM | disk | FTP | other *** search
- unit Playgrnd;
-
- interface
-
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, VBXCtrl, ITGDefs, Menus, Itgraph, NodeInfo, ConnInfo,
- Printers;
-
- type
- TPlayground = class(TForm)
- ITGraph1: TITGraph;
- MainMenu1: TMainMenu;
- File1: TMenuItem;
- Exit1: TMenuItem;
- N1: TMenuItem;
- PrintSetup1: TMenuItem;
- Print1: TMenuItem;
- N2: TMenuItem;
- SaveAs1: TMenuItem;
- Save1: TMenuItem;
- Open1: TMenuItem;
- New1: TMenuItem;
- OpenDialog1: TOpenDialog;
- SaveDialog1: TSaveDialog;
- Node1: TMenuItem;
- New2: TMenuItem;
- Remove1: TMenuItem;
- Options1: TMenuItem;
- AutoArrange1: TMenuItem;
- Automatic1: TMenuItem;
- Manual1: TMenuItem;
- Now1: TMenuItem;
- ArrangeMode1: TMenuItem;
- DrawDir1: TMenuItem;
- Hierarchy1: TMenuItem;
- Compact1: TMenuItem;
- FlowChart1: TMenuItem;
- Tree1: TMenuItem;
- RightToLeft1: TMenuItem;
- LeftToRight1: TMenuItem;
- BottomToTop1: TMenuItem;
- TopToBottom1: TMenuItem;
- PopupMenu1: TPopupMenu;
- ColorDialog1: TColorDialog;
- FillColor1: TMenuItem;
- TextColor1: TMenuItem;
- BorderColor1: TMenuItem;
- N3: TMenuItem;
- BackColor1: TMenuItem;
- DefFillColor1: TMenuItem;
- ForeColor1: TMenuItem;
- N4: TMenuItem;
- Font1: TMenuItem;
- FontDialog1: TFontDialog;
- PopupMenu2: TPopupMenu;
- MenuItem5: TMenuItem;
- MenuItem6: TMenuItem;
- MenuItem7: TMenuItem;
- MenuItem8: TMenuItem;
- MenuItem9: TMenuItem;
- PrinterSetupDialog1: TPrinterSetupDialog;
- ItemShape1: TMenuItem;
- ItemGraphic1: TMenuItem;
- DrawArrows1: TMenuItem;
- DrawBackLinks1: TMenuItem;
- DrawColored1: TMenuItem;
- DrawConnLabels1: TMenuItem;
- DrawHandles1: TMenuItem;
- DrawItemLabels1: TMenuItem;
- N5: TMenuItem;
- RubberBand1: TMenuItem;
- None1: TMenuItem;
- Items1: TMenuItem;
- Handles1: TMenuItem;
- Both1: TMenuItem;
- Special1: TMenuItem;
- GenerateTree1: TMenuItem;
- N8Nodes1: TMenuItem;
- N15Nodes1: TMenuItem;
- N25Nodes1: TMenuItem;
- N50Nodes1: TMenuItem;
- RandomDirectedGraph1: TMenuItem;
- N8Nodes2: TMenuItem;
- N15Nodes2: TMenuItem;
- N25Nodes2: TMenuItem;
- N50Nodes2: TMenuItem;
- N6: TMenuItem;
- RandomSizedNodes1: TMenuItem;
- Duplicate1: TMenuItem;
- PrintDialog1: TPrintDialog;
- GraphicStyle1: TMenuItem;
- NoGraphic1: TMenuItem;
- FullGraphic1: TMenuItem;
- HalfGraphic1: TMenuItem;
- IconGraphic1: TMenuItem;
- FindDialog1: TFindDialog;
- N7: TMenuItem;
- FindNode1: TMenuItem;
- FindAgain1: TMenuItem;
- PrintReport1: TMenuItem;
- DrawScale1: TMenuItem;
- FitToScreen1: TMenuItem;
- N251: TMenuItem;
- N501: TMenuItem;
- N751: TMenuItem;
- N1001: TMenuItem;
- N2001: TMenuItem;
- N4001: TMenuItem;
- BringToFront1: TMenuItem;
- SendToBack1: TMenuItem;
- N8: TMenuItem;
- ShiftLeft1: TMenuItem;
- ShiftRight1: TMenuItem;
- procedure New1Click(Sender: TObject);
- procedure Exit1Click(Sender: TObject);
- procedure Open1Click(Sender: TObject);
- procedure SaveAs1Click(Sender: TObject);
- procedure Save1Click(Sender: TObject);
- procedure FormResize(Sender: TObject);
- procedure New2Click(Sender: TObject);
- procedure AutoArrange1Click(Sender: TObject);
- procedure ManualArrange1Click(Sender: TObject);
- procedure ArrangeNow1Click(Sender: TObject);
- procedure Automatic1Click(Sender: TObject);
- procedure Manual1Click(Sender: TObject);
- procedure Now1Click(Sender: TObject);
- procedure Hierarchy1Click(Sender: TObject);
- procedure Compact1Click(Sender: TObject);
- procedure FlowChart1Click(Sender: TObject);
- procedure Tree1Click(Sender: TObject);
- procedure RightToLeft1Click(Sender: TObject);
- procedure LeftToRight1Click(Sender: TObject);
- procedure BottomToTop1Click(Sender: TObject);
- procedure TopToBottom1Click(Sender: TObject);
- procedure ITGraph1Click(Sender: TObject; var Button, Shift, X,
- Y: Integer);
- procedure ITGraph1ItemClick(Sender: TObject; var ItemIx, ItemHandle,
- Button, Shift, X, Y: Integer);
- procedure ITGraph1KeyPress(Sender: TObject; var Key: Char);
- procedure Remove1Click(Sender: TObject);
- procedure ITGraph1ItemConnect(Sender: TObject; var FromIx, FromHandle,
- ToIx, ToHandle, Button, Shift: Integer);
- procedure Print1Click(Sender: TObject);
- procedure FillColor1Click(Sender: TObject);
- procedure TextColor1Click(Sender: TObject);
- procedure BorderColor1Click(Sender: TObject);
- procedure ForeColor1Click(Sender: TObject);
- procedure BackColor1Click(Sender: TObject);
- procedure DefFillColor1Click(Sender: TObject);
- procedure Font1Click(Sender: TObject);
- procedure ITGraph1SelectRect(Sender: TObject; var L, T, W, H, Button,
- Shift: Integer);
- procedure ITGraph1DblClick(Sender: TObject; var Button, Shift, X,
- Y: Integer);
- procedure PrintSetup1Click(Sender: TObject);
- procedure ItemShape1Click(Sender: TObject);
- procedure ItemGraphic1Click(Sender: TObject);
- procedure ITGraph1ItemDblClick(Sender: TObject; var ItemIx, ItemHandle,
- Button, Shift, X, Y: Integer);
- procedure DrawArrows1Click(Sender: TObject);
- procedure DrawColored1Click(Sender: TObject);
- procedure DrawConnLabels1Click(Sender: TObject);
- procedure DrawHandles1Click(Sender: TObject);
- procedure DrawItemLabels1Click(Sender: TObject);
- procedure None1Click(Sender: TObject);
- procedure Items1Click(Sender: TObject);
- procedure Handles1Click(Sender: TObject);
- procedure Both1Click(Sender: TObject);
- procedure N8Nodes1Click(Sender: TObject);
- procedure N15Nodes1Click(Sender: TObject);
- procedure N25Nodes1Click(Sender: TObject);
- procedure N50Nodes1Click(Sender: TObject);
- procedure N8Nodes2Click(Sender: TObject);
- procedure N15Nodes2Click(Sender: TObject);
- procedure N25Nodes2Click(Sender: TObject);
- procedure N50Nodes2Click(Sender: TObject);
- procedure RandomSizedNodes1Click(Sender: TObject);
- procedure ITGraph1LineDblClick(Sender: TObject; var FromIx, ToIx,
- Button, Shift, X, Y: Integer);
- procedure ITGraph1KeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure Duplicate1Click(Sender: TObject);
- procedure NoGraphic1Click(Sender: TObject);
- procedure FullGraphic1Click(Sender: TObject);
- procedure HalfGraphic1Click(Sender: TObject);
- procedure IconGraphic1Click(Sender: TObject);
- procedure FindDialog1Find(Sender: TObject);
- procedure FindNode1Click(Sender: TObject);
- procedure FindAgain1Click(Sender: TObject);
- procedure PrintReport1Click(Sender: TObject);
- procedure FitToScreen1Click(Sender: TObject);
- procedure N251Click(Sender: TObject);
- procedure N501Click(Sender: TObject);
- procedure N751Click(Sender: TObject);
- procedure N1001Click(Sender: TObject);
- procedure N2001Click(Sender: TObject);
- procedure N4001Click(Sender: TObject);
- procedure FormShow(Sender: TObject);
- procedure BringToFront1Click(Sender: TObject);
- procedure SendToBack1Click(Sender: TObject);
- procedure ITGraph1ItemDrag(Sender: TObject; var ItemIx, X0, Y0, X1, Y1,
- Button, Shift: Integer);
- procedure ShiftLeft1Click(Sender: TObject);
- procedure ShiftRight1Click(Sender: TObject);
- private
- { Private declarations }
- procedure RandomTree(NodeCount: Integer);
- procedure RandomDirected(NodeCount: Integer);
- procedure UpdateMenus;
- procedure UpdateNodeMenu;
- function AskToSave : Boolean;
- public
- { Public declarations }
- end;
-
- var
- Playground: TPlayground;
-
- implementation
-
- {$R *.DFM}
-
- function TPlayground.AskToSave : Boolean;
- var
- wSave : Word;
- begin
- AskToSave := True;
-
- if ITGraph1.IsDirty
- then begin
- if SaveDialog1.FileName = ''
- then wSave := MessageDlg('Save changes made to the current graph?',
- mtConfirmation, [mbYes, mbNo, mbCancel], 0)
- else wSave := MessageDlg(
- Concat('Save changes made to ''', SaveDialog1.FileName, '''?'),
- mtConfirmation, [mbYes, mbNo, mbCancel], 0);
- if wSave = mrCancel
- then AskToSave := False
- else if wSave = mrYes
- then begin
- if SaveDialog1.FileName <> ''
- then ITGraph1.SaveAs := SaveDialog1.FileName
- else if SaveDialog1.Execute
- then ITGraph1.SaveAs := SaveDialog1.FileName
- else AskToSave := False
- end
- end;
- end;
-
- procedure TPlayground.New1Click(Sender: TObject);
- begin
- if AskToSave
- then begin
- ITGraph1.Clear;
- SaveDialog1.FileName := '';
- UpdateNodeMenu
- end
- end;
-
- procedure TPlayground.Exit1Click(Sender: TObject);
- begin
- if AskToSave
- then Halt
- end;
-
- procedure TPlayground.Open1Click(Sender: TObject);
- begin
- if AskToSave
- then begin
- if OpenDialog1.Execute
- then begin
- ITGraph1.LoadFrom := OpenDialog1.FileName;
- SaveDialog1.FileName := OpenDialog1.FileName;
- ITGraph1.IsDirty := False;
- UpdateMenus;
- UpdateNodeMenu
- end
- end
- end;
-
- procedure TPlayground.SaveAs1Click(Sender: TObject);
- begin
- if SaveDialog1.Execute
- then ITGraph1.SaveAs := SaveDialog1.FileName
- end;
-
- procedure TPlayground.Save1Click(Sender: TObject);
- begin
- if SaveDialog1.FileName <> ''
- then ITGraph1.SaveAs := SaveDialog1.FileName
- else if SaveDialog1.Execute
- then ITGraph1.SaveAs := SaveDialog1.FileName
- end;
-
- procedure TPlayground.FormResize(Sender: TObject);
- begin
- ITGraph1.Left := 0;
- ITGraph1.Top := 0;
- ITGraph1.Width := Playground.ClientWidth;
- ITGraph1.Height := Playground.ClientHeight
- end;
-
- procedure TPlayground.UpdateNodeMenu;
- var
- isSelected : Boolean;
- begin
- isSelected := ITGraph1.SelectedIndex <> -1;
-
- if isSelected then
- Playground.PopupMenu := PopupMenu1
- else
- Playground.PopupMenu := PopupMenu2;
-
- Remove1.Enabled := isSelected;
- Duplicate1.Enabled := isSelected;
- BringToFront1.Enabled := isSelected;
- SendToBack1.Enabled := isSelected;
-
- if (ITGraph1.ArrangeMode = ITG_ModeTree)
- and (ITGraph1.AutoArrange = ITG_AutoArrange) and isSelected then
- begin
- ShiftLeft1.Enabled := True;
- ShiftRight1.Enabled := True
- end
- else
- begin
- ShiftLeft1.Enabled := False;
- ShiftRight1.Enabled := False
- end
- end;
-
- procedure TPlayground.New2Click(Sender: TObject);
- begin
- ITGraph1.AddItem('');
- ITGraph1.SelectedIndex := ITGraph1.NewIndex;
- UpdateNodeMenu
- end;
-
- procedure TPlayground.AutoArrange1Click(Sender: TObject);
- begin
- ITGraph1.ArrangeMode := ITG_AutoArrange
- end;
-
- procedure TPlayground.ManualArrange1Click(Sender: TObject);
- begin
- ITGraph1.ArrangeMode := ITG_ManualArrange
- end;
-
- procedure TPlayground.ArrangeNow1Click(Sender: TObject);
- begin
- ITGraph1.AutoArrange := ITG_ArrangeNow;
- Manual1.Checked := True
- end;
-
- procedure TPlayground.Automatic1Click(Sender: TObject);
- begin
- ITGraph1.AutoArrange := ITG_AutoArrange;
- Automatic1.Checked := True;
- Manual1.Checked := False;
- AutoArrange1.Caption := '&AutoArrange (Automatic)'
- end;
-
- procedure TPlayground.Manual1Click(Sender: TObject);
- begin
- ITGraph1.AutoArrange := ITG_ManualArrange;
- Automatic1.Checked := False;
- Manual1.Checked := True;
- AutoArrange1.Caption := '&AutoArrange (Manual)'
- end;
-
- procedure TPlayground.Now1Click(Sender: TObject);
- begin
- ITGraph1.AutoArrange := ITG_ArrangeNow;
- Automatic1.Checked := False;
- Manual1.Checked := True;
- AutoArrange1.Caption := '&AutoArrange (Manual)'
- end;
-
- procedure TPlayground.Hierarchy1Click(Sender: TObject);
- begin
- ITGraph1.ArrangeMode := ITG_ModeHierarchy;
- UpdateMenus
- end;
-
- procedure TPlayground.Compact1Click(Sender: TObject);
- begin
- ITGraph1.ArrangeMode := ITG_ModeCompact;
- UpdateMenus
- end;
-
- procedure TPlayground.FlowChart1Click(Sender: TObject);
- begin
- ITGraph1.ArrangeMode := ITG_ModeFlowChart;
- UpdateMenus
- end;
-
- procedure TPlayground.Tree1Click(Sender: TObject);
- begin
- ITGraph1.ArrangeMode := ITG_ModeTree;
- UpdateMenus
- end;
-
- procedure TPlayground.RightToLeft1Click(Sender: TObject);
- begin
- ITGraph1.DrawDir := ITG_RightToLeft;
- UpdateMenus
- end;
-
- procedure TPlayground.LeftToRight1Click(Sender: TObject);
- begin
- ITGraph1.DrawDir := ITG_LeftToRight;
- UpdateMenus
- end;
-
- procedure TPlayground.BottomToTop1Click(Sender: TObject);
- begin
- ITGraph1.DrawDir := ITG_BottomToTop;
- UpdateMenus
- end;
-
- procedure TPlayground.TopToBottom1Click(Sender: TObject);
- begin
- ITGraph1.DrawDir := ITG_TopToBottom;
- UpdateMenus
- end;
-
- procedure TPlayground.ITGraph1Click(Sender: TObject; var Button, Shift, X,
- Y: Integer);
- begin
- ITGraph1.SelectedIndex := -1;
- UpdateNodeMenu
- end;
-
- procedure TPlayground.ITGraph1ItemClick(Sender: TObject; var ItemIx,
- ItemHandle, Button, Shift, X, Y: Integer);
- begin
- if ItemHandle = 0 then
- if Button = ITG_LeftButton then
- begin
- ITGraph1.SelectedIndex := ItemIx;
- UpdateNodeMenu
- end
- end;
-
- procedure TPlayground.ITGraph1KeyPress(Sender: TObject; var Key: Char);
- var
- selIx : Integer;
- selList : String;
- begin
- selIx := ITGraph1.SelectedIndex;
- if selIx <> -1 then
- begin
- selList := ITGraph1.List(.selIx.);
- if Ord(Key) = 8 then
- if selList[Length(selList)] = Char(10) then
- Delete(selList, Length(selList)-1, 2)
- else
- Delete(selList, Length(selList), 1)
- else if Ord(Key) = 13 then
- selList := Concat(selList, Char(13), Char(10))
- else
- selList := Concat(selList, Key);
- ITGraph1.List(.selIx.) := selList
- end
- end;
- procedure TPlayground.Remove1Click(Sender: TObject);
- var
- oldSelIx : Integer;
- begin
- oldSelIx := ITGraph1.SelectedIndex;
- ITGraph1.RemoveItem(ITGraph1.SelectedIndex);
- if oldSelIx > 0 then
- ITGraph1.SelectedIndex := oldSelIx - 1;
- UpdateNodeMenu
- end;
-
- procedure TPlayground.ITGraph1ItemConnect(Sender: TObject; var FromIx,
- FromHandle, ToIx, ToHandle, Button, Shift: Integer);
- begin
- if (Shift and ITG_AltDown) <> 0 then
- begin
- ITGraph1.QueryItem := ToIx;
- ITGraph1.QueryState := ITG_QueryGetSources;
- if ITGraph1.QueryState <> 0 then
- ITGraph1.RemoveFrom(.ITGraph1.ConnectFromIndex.) := ToIx
- end;
-
- ITGraph1.ConnectTo(.FromIx.) := ToIx;
- if FromHandle <> 0 then
- begin
- ITGraph1.ConnectFromHandle := FromHandle;
- ITGraph1.ConnectToHandle := ToHandle
- end
- else
- begin
- ITGraph1.ConnectFromHandle := 3;
- ITGraph1.ConnectToHandle := 1
- end
- end;
-
- procedure TPlayground.Print1Click(Sender: TObject);
- begin
- if PrintDialog1.Execute then
- begin
- ITGraph1.PrintHeader := '&2ITGraph Property Playground&5Page &p of &n';
- Printer.BeginDoc;
- ITGraph1.PrintGraph := Printer.Handle;
- Printer.EndDoc;
- end
- end;
-
- procedure TPlayground.FillColor1Click(Sender: TObject);
- begin
- ColorDialog1.Color := ITGraph1.ItemFillColor(.ITGraph1.SelectedIndex.);
- if ColorDialog1.Execute then
- ITGraph1.ItemFillColor(.ITGraph1.SelectedIndex.) := ColorDialog1.Color
- end;
-
- procedure TPlayground.TextColor1Click(Sender: TObject);
- begin
- ColorDialog1.Color := ITGraph1.ItemTextColor(.ITGraph1.SelectedIndex.);
- if ColorDialog1.Execute then
- ITGraph1.ItemTextColor(.ITGraph1.SelectedIndex.) := ColorDialog1.Color
- end;
-
- procedure TPlayground.BorderColor1Click(Sender: TObject);
- begin
- ColorDialog1.Color := ITGraph1.ItemBorderColor(.ITGraph1.SelectedIndex.);
- if ColorDialog1.Execute then
- ITGraph1.ItemBorderColor(.ITGraph1.SelectedIndex.) := ColorDialog1.Color
- end;
-
- procedure TPlayground.ForeColor1Click(Sender: TObject);
- begin
- ColorDialog1.Color := ITGraph1.ForeColor;
- if ColorDialog1.Execute then
- ITGraph1.ForeColor := ColorDialog1.Color
- end;
-
- procedure TPlayground.BackColor1Click(Sender: TObject);
- begin
- ColorDialog1.Color := ITGraph1.BackColor;
- if ColorDialog1.Execute then
- ITGraph1.BackColor := ColorDialog1.Color
- end;
-
- procedure TPlayground.DefFillColor1Click(Sender: TObject);
- begin
- ColorDialog1.Color := ITGraph1.FillColor;
- if ColorDialog1.Execute then
- ITGraph1.FillColor := ColorDialog1.Color
- end;
-
- procedure TPlayground.Font1Click(Sender: TObject);
- begin
- FontDialog1.Font := ITGraph1.Font;
- if FontDialog1.Execute then
- begin
- ITGraph1.Font := FontDialog1.Font;
- {we have to explicitly set the IsDirty flag in Delphi
- because Delphi's Font property is differnt than Visual
- Basic's font properties}
- ITGraph1.IsDirty := True
- end
- end;
-
- procedure TPlayground.ITGraph1SelectRect(Sender: TObject; var L, T, W, H,
- Button, Shift: Integer);
- begin
- ITGraph1.ZoomSelectRect := True
- end;
-
- procedure TPlayground.ITGraph1DblClick(Sender: TObject; var Button, Shift,
- X, Y: Integer);
- begin
- ITGraph1.DrawScale := 0
- end;
-
- procedure TPlayground.PrintSetup1Click(Sender: TObject);
- begin
- PrinterSetupDialog1.Execute
- end;
-
- procedure TPlayground.ItemShape1Click(Sender: TObject);
- var
- newShape : Integer;
- begin
- ITGraph1.ShapeSelect := ITGraph1.ItemShape(.ITGraph1.SelectedIndex.);
- newShape := ITGraph1.ShapeSelect;
- if newShape <> -1 then
- ITGraph1.ItemShape(.ITGraph1.SelectedIndex.) := newShape
- end;
-
- procedure TPlayground.ItemGraphic1Click(Sender: TObject);
- var
- newGraphic : Integer;
- begin
- ITGraph1.GraphicSelect := ITGraph1.ItemGraphic(.ITGraph1.SelectedIndex.);
- newGraphic := ITGraph1.GraphicSelect;
- if newGraphic <> -1 then
- begin
- ITGraph1.ItemGraphic(.ITGraph1.SelectedIndex.) := newGraphic;
- ITGraph1.ItemGraphicStyle(.ITGraph1.SelectedIndex.) := ITG_GraphicShapeFill
- end
- end;
-
- procedure TPlayground.ITGraph1ItemDblClick(Sender: TObject; var ItemIx,
- ItemHandle, Button, Shift, X, Y: Integer);
- begin
- NodeInfoDlg.itgTheGraph := @ITGraph1;
- NodeInfoDlg.ShowModal
- end;
-
- procedure TPlayground.DrawArrows1Click(Sender: TObject);
- begin
- ITGraph1.DrawArrows := not ITGraph1.DrawArrows;
- DrawArrows1.Checked := ITGraph1.DrawArrows
- end;
-
- procedure TPlayground.DrawColored1Click(Sender: TObject);
- begin
- ITGraph1.DrawColored := not ITGraph1.DrawColored;
- DrawColored1.Checked := ITGraph1.DrawColored
- end;
-
- procedure TPlayground.DrawConnLabels1Click(Sender: TObject);
- begin
- ITGraph1.DrawConnLabels := not ITGraph1.DrawConnLabels;
- DrawConnLabels1.Checked := ITGraph1.DrawConnLabels
- end;
-
- procedure TPlayground.DrawHandles1Click(Sender: TObject);
- begin
- ITGraph1.DrawHandles := not ITGraph1.DrawHandles;
- DrawHandles1.Checked := ITGraph1.DrawHandles
- end;
-
- procedure TPlayground.DrawItemLabels1Click(Sender: TObject);
- begin
- ITGraph1.DrawItemLabels := not ITGraph1.DrawItemLabels;
- DrawItemLabels1.Checked := ITGraph1.DrawItemLabels
- end;
-
- procedure TPlayground.None1Click(Sender: TObject);
- begin
- ITGraph1.RubberBand := ITG_RBNone;
- None1.Checked := True;
- Items1.Checked := False;
- Handles1.Checked := False;
- Both1.Checked := False;
- RubberBand1.Caption := '&Rubber Band (None)'
- end;
-
- procedure TPlayground.Items1Click(Sender: TObject);
- begin
- ITGraph1.RubberBand := ITG_RBItems;
- None1.Checked := False;
- Items1.Checked := True;
- Handles1.Checked := False;
- Both1.Checked := False;
- RubberBand1.Caption := '&Rubber Band (Items)'
- end;
-
- procedure TPlayground.Handles1Click(Sender: TObject);
- begin
- ITGraph1.RubberBand := ITG_RBHandles;
- None1.Checked := False;
- Items1.Checked := False;
- Handles1.Checked := True;
- Both1.Checked := False;
- RubberBand1.Caption := '&Rubber Band (Handles)'
- end;
-
- procedure TPlayground.Both1Click(Sender: TObject);
- begin
- ITGraph1.RubberBand := ITG_RBBoth;
- None1.Checked := False;
- Items1.Checked := False;
- Handles1.Checked := False;
- Both1.Checked := True;
- RubberBand1.Caption := '&Rubber Band (Both)'
- end;
-
- procedure TPlayground.RandomTree(NodeCount : Integer);
- var
- i, j : Integer;
- oldRedraw : Boolean;
- begin
- if AskToSave
- then begin
- oldRedraw := ITGraph1.Redraw;
- ITGraph1.Redraw := False;
- ITGraph1.Clear;
- Randomize;
- for i := 1 to NodeCount do
- begin
- ITGraph1.AddItem(Concat('Node #', IntToStr(i)));
- if RandomSizedNodes1.Checked then
- begin
- ITGraph1.ItemWidth(.i-1.) := Random(200) + 25;
- ITGraph1.ItemHeight(.i-1.) := Random(200) + 25;
- end;
- if i > 1 then
- begin
- j := Random(i-1);
- ITGraph1.ConnectTo(.j.) := i-1;
- end;
- end;
- ITGraph1.Redraw := oldRedraw
- end
- end;
-
- procedure TPlayground.RandomDirected(NodeCount : Integer);
- var
- i, j, k : Integer;
- oldRedraw : Boolean;
- begin
- if AskToSave
- then begin
- oldRedraw := ITGraph1.Redraw;
- ITGraph1.Redraw := False;
- ITGraph1.Clear;
- Randomize;
- for i := 1 to NodeCount do
- begin
- ITGraph1.AddItem(Concat('Node #', IntToStr(i)));
- if RandomSizedNodes1.Checked then
- begin
- ITGraph1.ItemWidth(.i-1.) := Random(200) + 25;
- ITGraph1.ItemHeight(.i-1.) := Random(200) + 25;
- end;
- if i > 1 then
- for j := 0 to Random(3) do
- begin
- k := Random(i-1);
- ITGraph1.ConnectTo(.k.) := i-1;
- end;
- end;
- ITGraph1.Redraw := oldRedraw
- end
- end;
-
- procedure TPlayground.N8Nodes1Click(Sender: TObject);
- begin
- RandomTree(8)
- end;
-
- procedure TPlayground.N15Nodes1Click(Sender: TObject);
- begin
- RandomTree(15)
- end;
-
- procedure TPlayground.N25Nodes1Click(Sender: TObject);
- begin
- RandomTree(25)
- end;
-
- procedure TPlayground.N50Nodes1Click(Sender: TObject);
- begin
- RandomTree(50)
- end;
-
- procedure TPlayground.N8Nodes2Click(Sender: TObject);
- begin
- RandomDirected(8)
- end;
-
- procedure TPlayground.N15Nodes2Click(Sender: TObject);
- begin
- RandomDirected(15)
- end;
-
- procedure TPlayground.N25Nodes2Click(Sender: TObject);
- begin
- RandomDirected(25)
- end;
-
- procedure TPlayground.N50Nodes2Click(Sender: TObject);
- begin
- RandomDirected(50)
- end;
-
- procedure TPlayground.RandomSizedNodes1Click(Sender: TObject);
- begin
- RandomSizedNodes1.Checked := not RandomSizedNodes1.Checked
- end;
-
- procedure TPlayground.ITGraph1LineDblClick(Sender: TObject; var FromIx,
- ToIx, Button, Shift, X, Y: Integer);
- begin
- ITGraph1.ConnectTo(.FromIx.) := ToIx;
- ConnInfoDlg.itgTheGraph := @ITGraph1;
- ConnInfoDlg.ShowModal
- end;
-
- procedure TPlayground.ITGraph1KeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if (Key = VK_DELETE) and (ITGraph1.SelectedIndex >= 0) then
- Playground.Remove1Click(Sender)
- else if Key = VK_INSERT then
- Playground.New2Click(Sender)
- else if Key = VK_TAB then
- ITGraph1.SelectedIndex := ITGraph1.SelectedIndex + 1
- else if (Key = VK_HOME) and BringToFront1.Enabled then
- Playground.BringToFront1Click(Sender)
- else if (Key = VK_END) and SendToBack1.Enabled then
- Playground.SendToBack1Click(Sender)
- else if (Key = VK_PRIOR) and ShiftLeft1.Enabled then
- Playground.ShiftLeft1Click(Sender)
- else if (Key = VK_NEXT) and ShiftRight1.Enabled then
- Playground.ShiftRight1Click(Sender)
- end;
-
- procedure TPlayground.Duplicate1Click(Sender: TObject);
- var
- selIx, newIx : Integer;
- begin
- selIx := ITGraph1.SelectedIndex;
- ITGraph1.AddItem(ITGraph1.List(.selIx.));
- newIx := ITGraph1.NewIndex;
-
- ITGraph1.ItemXpos(.newIx.) := ITGraph1.ItemXpos(.selIx.) + 10;
- ITGraph1.ItemYpos(.newIx.) := ITGraph1.ItemYpos(.selIx.) + 10;
- ITGraph1.ItemWidth(.newIx.) := ITGraph1.ItemWidth(.selIx.);
- ITGraph1.ItemHeight(.newIx.) := ITGraph1.ItemHeight(.selIx.);
- ITGraph1.ItemBorderColor(.newIx.) := ITGraph1.ItemBorderColor(.selIx.);
- ITGraph1.ItemFillColor(.newIx.) := ITGraph1.ItemFillColor(.selIx.);
- ITGraph1.ItemTextColor(.newIx.) := ITGraph1.ItemTextColor(.selIx.);
- ITGraph1.ItemShape(.newIx.) := ITGraph1.ItemShape(.selIx.);
- ITGraph1.ItemGraphic(.newIx.) := ITGraph1.ItemGraphic(.selIx.);
- ITGraph1.ItemGraphicStyle(.newIx.) := ITGraph1.ItemGraphicStyle(.selIx.);
-
- ITGraph1.SelectedIndex := 0;
- end;
-
- procedure TPlayground.UpdateMenus;
- begin
- case ITGraph1.ArrangeMode of
- ITG_ModeHierarchy: begin
- Hierarchy1.Checked := True;
- Compact1.Checked := False;
- FlowChart1.Checked := False;
- Tree1.Checked := False;
- ArrangeMode1.Caption := 'Arrange&Mode (Hierarchy)'
- end;
- ITG_ModeCompact: begin
- Hierarchy1.Checked := False;
- Compact1.Checked := True;
- FlowChart1.Checked := False;
- Tree1.Checked := False;
- ArrangeMode1.Caption := 'Arrange&Mode (Compact)'
- end;
- ITG_ModeFlowChart: begin
- Hierarchy1.Checked := False;
- Compact1.Checked := False;
- FlowChart1.Checked := True;
- Tree1.Checked := False;
- ArrangeMode1.Caption := 'Arrange&Mode (FlowChart)'
- end;
- ITG_ModeTree: begin
- Hierarchy1.Checked := False;
- Compact1.Checked := False;
- FlowChart1.Checked := False;
- Tree1.Checked := True;
- ArrangeMode1.Caption := 'Arrange&Mode (Tree)'
- end;
- end;
-
- case ITGraph1.DrawDir of
- ITG_RightToLeft: begin
- RightToLeft1.Checked := True;
- LeftToRight1.Checked := False;
- BottomToTop1.Checked := False;
- TopToBottom1.Checked := False;
- DrawDir1.Caption := '&DrawDir (RightToLeft)'
- end;
- ITG_LeftToRight: begin
- RightToLeft1.Checked := False;
- LeftToRight1.Checked := True;
- BottomToTop1.Checked := False;
- TopToBottom1.Checked := False;
- DrawDir1.Caption := '&DrawDir (LeftToRight)'
- end;
- ITG_BottomToTop: begin
- RightToLeft1.Checked := False;
- LeftToRight1.Checked := False;
- BottomToTop1.Checked := True;
- TopToBottom1.Checked := False;
- DrawDir1.Caption := '&DrawDir (BottomToTop)'
- end;
- ITG_TopToBottom: begin
- RightToLeft1.Checked := False;
- LeftToRight1.Checked := False;
- BottomToTop1.Checked := False;
- TopToBottom1.Checked := True;
- DrawDir1.Caption := '&DrawDir (TopToBottom)'
- end;
- end;
-
- DrawArrows1.Checked := ITGraph1.DrawArrows;
- DrawColored1.Checked := ITGraph1.DrawColored;
- DrawConnLabels1.Checked := ITGraph1.DrawConnLabels;
- DrawHandles1.Checked := ITGraph1.DrawHandles;
- DrawItemLabels1.Checked := ITGraph1.DrawItemLabels;
-
- if ITGraph1.DrawScale = 0 then
- DrawScale1.Caption := 'Draw&Scale (Fit to Screen)'
- else
- DrawScale1.Caption := Concat('Draw&Scale (',
- IntToStr(ITGraph1.DrawScale), '%)');
-
- UpdateNodeMenu
- end;
-
- procedure TPlayground.NoGraphic1Click(Sender: TObject);
- var
- selIx : Integer;
- begin
- selIx := ITGraph1.SelectedIndex;
- ITGraph1.ItemGraphicStyle(.selIx.) := ITG_GraphicNone;
- ITGraph1.ItemLabelLeft(.selIx.) := 0;
- ITGraph1.ItemLabelWidth(.selIx.) := 0; { until right edge }
- ITGraph1.ItemLabelTop(.selIx.) := 0;
- ITGraph1.ItemLabelHeight(.selIx.) := 0; { until bottom }
- ITGraph1.ItemLabelAlign(.selIx.) := ITG_AlignMiddleCenter;
- end;
-
- procedure TPlayground.FullGraphic1Click(Sender: TObject);
- var
- selIx : Integer;
- begin
- selIx := ITGraph1.SelectedIndex;
- ITGraph1.ItemGraphicStyle(.selIx.) := ITG_GraphicShapeFill;
- ITGraph1.ItemLabelLeft(.selIx.) := 0;
- ITGraph1.ItemLabelWidth(.selIx.) := 0; { until right edge }
- ITGraph1.ItemLabelTop(.selIx.) := 0;
- ITGraph1.ItemLabelHeight(.selIx.) := 0; { until bottom }
- ITGraph1.ItemLabelAlign(.selIx.) := ITG_AlignMiddleCenter;
- end;
-
- procedure TPlayground.HalfGraphic1Click(Sender: TObject);
- var
- selIx : Integer;
- begin
- selIx := ITGraph1.SelectedIndex;
- ITGraph1.ItemGraphicStyle(.selIx.) := ITG_GraphicIconFill;
- ITGraph1.ItemGraphicLeft(.selIx.) := 0;
- ITGraph1.ItemGraphicWidth(.selIx.) := ITGraph1.ItemWidth(.selIx.) div 2;
- ITGraph1.ItemGraphicTop(.selIx.) := 0;
- ITGraph1.ItemGraphicHeight(.selIx.) := ITGraph1.ItemHeight(.selIx.);
-
- ITGraph1.ItemLabelLeft(.selIx.) := ITGraph1.ItemWidth(.selIx.) div 2 + 2;
- ITGraph1.ItemLabelWidth(.selIx.) := 0; { until right edge }
- ITGraph1.ItemLabelTop(.selIx.) := 0;
- ITGraph1.ItemLabelHeight(.selIx.) := 0; { until bottom }
- ITGraph1.ItemLabelAlign(.selIx.) := ITG_AlignMiddleLeft;
- end;
-
- procedure TPlayground.IconGraphic1Click(Sender: TObject);
- var
- selIx : Integer;
- begin
- selIx := ITGraph1.SelectedIndex;
- ITGraph1.ItemGraphicStyle(.selIx.) := ITG_GraphicIconFillIso;
- ITGraph1.ItemGraphicLeft(.selIx.) := 5;
- ITGraph1.ItemGraphicWidth(.selIx.) := 32;
- ITGraph1.ItemGraphicTop(.selIx.) := 5;
- ITGraph1.ItemGraphicHeight(.selIx.) := 32;
-
- ITGraph1.ItemLabelLeft(.selIx.) := 40;
- ITGraph1.ItemLabelWidth(.selIx.) := 0; { until right edge }
- ITGraph1.ItemLabelTop(.selIx.) := 0;
- ITGraph1.ItemLabelHeight(.selIx.) := 0; { until bottom }
- ITGraph1.ItemLabelAlign(.selIx.) := ITG_AlignMiddleLeft;
- end;
-
- procedure TPlayground.FindDialog1Find(Sender: TObject);
- var
- i, ix : Integer;
- begin
- FindAgain1.Enabled := True;
- for i := 1 to ITGraph1.ListCount - 1 do
- begin
- ix := (ITGraph1.SelectedIndex + i) mod ITGraph1.ListCount;
- if Pos(FindDialog1.FindText, ITGraph1.List(.ix.)) > 0 then
- begin
- ITGraph1.SelectRectLeft := ITGraph1.ItemXpos(.ix.);
- ITGraph1.SelectRectTop := ITGraph1.ItemYpos(.ix.);
- ITGraph1.SelectRectWidth := ITGraph1.ItemWidth(.ix.);
- ITGraph1.SelectRectHeight := ITGraph1.ItemHeight(.ix.);
- ITGraph1.ZoomSelectRect := False; { scroll w/o scale change }
- ITGraph1.SelectedIndex := ix;
- FindDialog1.CloseDialog;
- Exit;
- end;
- end;
-
- MessageDlg('Search string ''' + FindDialog1.FindText + ''' not found',
- mtInformation, [mbOk], 0);
- FindDialog1.CloseDialog
- end;
-
- procedure TPlayground.FindNode1Click(Sender: TObject);
- begin
- FindDialog1.Position := Point(Playground.Left + 50, Playground.Top + 50);
- FindDialog1.Execute
- end;
-
- procedure TPlayground.FindAgain1Click(Sender: TObject);
- begin
- Playground.FindDialog1Find(FindDialog1)
- end;
-
- procedure TPlayground.PrintReport1Click(Sender: TObject);
- var
- pos : TPoint;
- rcGraph : TRect;
- charHeight, charWidth, i : Integer;
- begin
- Printer.BeginDoc;
-
- {compute width and height of largest character, 'M'}
- charWidth := Printer.Canvas.TextWidth('M');
- charHeight := Printer.Canvas.TextHeight('M');
-
- {compute output position, initially indent by two lines and four chars}
- pos := Point(4 * charWidth, 2 * charHeight);
-
- {print heading information}
- Printer.Canvas.TextOut(pos.x, pos.y, 'ITGraph Property Playground');
- pos.y := pos.y + charHeight; {go to next line}
- Printer.Canvas.TextOut(pos.x, pos.y, 'Current Graph and Associated Statistics');
- pos.y := pos.y + 2 * charHeight; {skip a line}
-
- {compute bounding rectangle for graph, 1/3 of page width, 1/5 of page ht}
- rcGraph := Rect(pos.x, pos.y, pos.x + Printer.PageWidth div 3,
- pos.y + Printer.PageHeight div 5);
- {draw rectangle around graph}
- Printer.Canvas.Rectangle(rcGraph.Left, rcGraph.Top,
- rcGraph.Right, rcGraph.Bottom);
-
- ITGraph1.PrintToDC := 0; {select entire graph}
- {select the target print area}
- ITGraph1.PrintRectLeft := rcGraph.Left;
- ITGraph1.PrintRectTop := rcGraph.Top;
- ITGraph1.PrintRectWidth := rcGraph.Right - rcGraph.Left;
- ITGraph1.PrintRectHeight := rcGraph.Bottom - rcGraph.Top;
- ITGraph1.PrintToDC := Printer.Handle; {print the graph}
-
- pos.y := pos.y + ITGraph1.PrintRectHeight;
- pos.y := pos.y + charHeight;
-
- {print the names of all nodes in the graph}
- Printer.Canvas.TextOut(pos.x, pos.y, Concat('The Graph Contains ',
- IntToStr(ITGraph1.ListCount), ' Nodes'));
- pos.y := pos.y + charHeight;
- pos.x := pos.x + 2 * charWidth; {indent the node list}
- for i := 0 to ITGraph1.ListCount - 1 do
- begin
- Printer.Canvas.TextOut(pos.x, pos.y, Concat(' Node ',
- IntToStr(i), ': ', ITGraph1.List(.i.)));
- pos.y := pos.y + charHeight;
- end;
-
- Printer.EndDoc;
- end;
-
- procedure TPlayground.FitToScreen1Click(Sender: TObject);
- begin
- ITGraph1.DrawScale := 0;
- UpdateMenus
- end;
-
- procedure TPlayground.N251Click(Sender: TObject);
- begin
- ITGraph1.DrawScale := 25;
- UpdateMenus
- end;
-
- procedure TPlayground.N501Click(Sender: TObject);
- begin
- ITGraph1.DrawScale := 50;
- UpdateMenus
- end;
-
- procedure TPlayground.N751Click(Sender: TObject);
- begin
- ITGraph1.DrawScale := 75;
- UpdateMenus
- end;
-
- procedure TPlayground.N1001Click(Sender: TObject);
- begin
- ITGraph1.DrawScale := 100;
- UpdateMenus
- end;
-
- procedure TPlayground.N2001Click(Sender: TObject);
- begin
- ITGraph1.DrawScale := 200;
- UpdateMenus
- end;
-
- procedure TPlayground.N4001Click(Sender: TObject);
- begin
- ITGraph1.DrawScale := 400;
- UpdateMenus
- end;
-
- procedure TPlayground.FormShow(Sender: TObject);
- begin
- ITGraph1.Clear
- end;
-
- procedure TPlayground.BringToFront1Click(Sender: TObject);
- begin
- ITGraph1.ItemIndex(.ITGraph1.SelectedIndex.) := ITGraph1.ListCount - 1
- end;
-
- procedure TPlayground.SendToBack1Click(Sender: TObject);
- begin
- ITGraph1.ItemIndex(.ITGraph1.SelectedIndex.) := 0
- end;
-
- procedure TPlayground.ITGraph1ItemDrag(Sender: TObject; var ItemIx, X0, Y0,
- X1, Y1, Button, Shift: Integer);
- begin
- ITGraph1.SelectedIndex := ItemIx
- end;
-
- procedure TPlayground.ShiftLeft1Click(Sender: TObject);
- var
- selIx, parIx, sibIx : Integer;
- begin
- selIx := ITGraph1.SelectedIndex;
- ITGraph1.QueryItem := selIx;
- ITGraph1.QueryState := ITG_QueryGetSources;
- if ITGraph1.QueryState <> 0 then
- begin
- parIx := ITGraph1.ConnectFromIndex;
- ITGraph1.QueryItem := parIx;
- ITGraph1.QueryState := ITG_QueryGetTargets;
- sibIx := -1;
- while (ITGraph1.QueryState <> 0) and (ITGraph1.ConnectToIndex <> selIx) do
- begin
- sibIx := ITGraph1.ConnectToIndex;
- ITGraph1.QueryState := ITG_QueryIterate
- end;
- if sibIx >= 0 then
- begin
- ITGraph1.ItemIndex(.selIx.) := sibIx;
- ITGraph1.AutoArrange := ITG_AutoArrange
- end
- end
- end;
-
- procedure TPlayground.ShiftRight1Click(Sender: TObject);
- var
- selIx, parIx, sibIx : Integer;
- begin
- selIx := ITGraph1.SelectedIndex;
- ITGraph1.QueryItem := selIx;
- ITGraph1.QueryState := ITG_QueryGetSources;
- if ITGraph1.QueryState <> 0 then
- begin
- parIx := ITGraph1.ConnectFromIndex;
- ITGraph1.QueryItem := parIx;
- ITGraph1.QueryState := ITG_QueryGetTargets;
- sibIx := -1;
- while (ITGraph1.QueryState <> 0) and (sibIx <= selIx) do
- begin
- sibIx := ITGraph1.ConnectToIndex;
- ITGraph1.QueryState := ITG_QueryIterate
- end;
- if sibIx > selIx then
- begin
- ITGraph1.ItemIndex(.selIx.) := sibIx;
- ITGraph1.AutoArrange := ITG_AutoArrange
- end
- end
- end;
-
- end.
-